package com.browsesoft.resource;

import java.util.Hashtable;
import java.util.Iterator;
import java.util.LinkedList;

import com.browsesoft.Entity;

/**
 * 资源接口,resource的属性的一个字段childrenid:子的id用逗号分开
 */
public interface Resource extends Entity {
	/**
	 * 设置府资源
	 */
	public void setParent(Resource res);

	/**
	 * 得到父资源
	 * 
	 * @return 父资源
	 */
	public Resource getParent();

	/**
	 * 添加子资源
	 */
	public void addChild(Resource res);

	/**
	 * 移走子资源
	 * 
	 * @param child
	 *            子资源
	 */
	public void removeChild(Resource child);

	/**
	 * 得到子资源列表
	 * 
	 * @return 子资源列表
	 */
	public Iterator getChildren();

	/**
	 * 得到资源类型
	 * 
	 * @return 资源类型
	 */
	public String getType();

	/**
	 * 设置资源类型
	 * 
	 * @param type
	 *            资源类型
	 */
	public void setType(String type);

	/**
	 * 根据资源类型得到所有的子资源
	 * 
	 * @param type
	 *            子资源类型
	 * @return 子资源链表
	 */
	public LinkedList getChildrenByType(String type);

	/**
	 * 得到位置
	 * 
	 * @return 位置
	 */
	public int getPosition();

	/**
	 * 设置位置
	 * 
	 * @param pos
	 *            位置
	 */
	public void setPosition(int pos);

	public LinkedList getAllChildrens();

	public LinkedList getChildrensNoLeaf();

	/**
	 * 更新资源属性
	 * 
	 * @param ht
	 *            资源属性
	 * @throws Exception
	 */
	public void updateAttributes(Hashtable ht) throws Exception;

	/**
	 * 添加权限
	 * 
	 * @param r
	 *            权限
	 */
	public void addRight(Right r);

	/**
	 * 根据资源添加权限
	 * 
	 * @param res
	 *            资源
	 */
	public void addRightByResource(Resource res);

	/**
	 * 移走权限
	 * 
	 * @param r
	 *            权限
	 */
	public void removeRight(Right r);

	/**
	 * 根据资源移走权限
	 * 
	 * @param res
	 *            资源
	 */
	public void removeRightByResource(Resource res);

	/**
	 * 根据资源和权限类型移走权限
	 * 
	 * @param res
	 *            资源
	 * @param type
	 *            权限类型
	 */
	public void removeRightByResourceAndType(Resource res, RightType type);

	/**
	 * 获得权限列表
	 * 
	 * @return 权限列表
	 */
	public LinkedList getRights();

	/**
	 * 建立关系
	 */
	public void createRelation();

	/**
	 * 设置资源对应的编辑模板名称
	 */
	public void setTemplateName(String name);

	/**
	 * 取得资源对应的编辑模板名称
	 */
	public String getTemplateName();

	/**
	 * 取得数据库表名
	 * 
	 * @return 数据库表名
	 */
	public String getTableName();

}